package com.heima.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.heima.mapper.ProductMMapper;
import com.heima.pojo.dto.TbSkuDTO;
import com.heima.pojo.dto.TbSkuQueryDTO;
import com.heima.pojo.entity.TbSku;
import com.heima.pojo.vo.SkuVO;
import com.heima.pojo.vo.TbSkuPageVO;
import com.heima.service.ProductMService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;

@Service
public class ProductMServiceImpl implements ProductMService {
    @Autowired
    private ProductMMapper productMMapper;

    @Override
    public boolean addSkuClass(TbSkuDTO tbSkuDTO) {
        TbSku tbSku = new TbSku();
        BeanUtils.copyProperties(tbSkuDTO, tbSku);
        tbSku.setUpdateTime(LocalDateTime.now());
        tbSku.setCreateTime(LocalDateTime.now());
        return productMMapper.addTbSku(tbSku) > 0;

    }

    @Override
    public TbSkuPageVO search(TbSkuQueryDTO tbSkuQueryDTO) {
        // 确保分页参数有默认值
        if (tbSkuQueryDTO.getPageIndex() == null || tbSkuQueryDTO.getPageIndex() < 1) {
            tbSkuQueryDTO.setPageIndex(1);
        }
        if (tbSkuQueryDTO.getPageSize() == null || tbSkuQueryDTO.getPageSize() < 1) {
            tbSkuQueryDTO.setPageSize(10);
        }
        
        // 启动分页
        PageHelper.startPage(tbSkuQueryDTO.getPageIndex(), tbSkuQueryDTO.getPageSize());
        // 执行查询
        List<SkuVO> records = productMMapper.search(tbSkuQueryDTO);
        // 处理商品ID，确保转换为字符串避免前端精度丢失
        List<SkuVO> processedRecords = records.stream().map(skuVO -> {
            if (skuVO.getSkuId() != null && !skuVO.getSkuId().startsWith("\"")) {
                skuVO.setSkuId(String.valueOf(skuVO.getSkuId()));
            }
            return skuVO;
        }).collect(Collectors.toList());
        
        // 获取分页信息
        Page<SkuVO> page = (Page<SkuVO>) records;
        
        // 构造返回结果
        TbSkuPageVO pageVO = new TbSkuPageVO();
        pageVO.setPageIndex((long) page.getPageNum());
        pageVO.setPageSize((long) page.getPageSize());
        pageVO.setTotalCount(page.getTotal());
        pageVO.setTotalPage((long) page.getPages());
        pageVO.setCurrentPageRecords(processedRecords);
        return pageVO;

    }

    @Override
    public boolean updateSkuClass(String skuId, TbSku tbSku) {
        return productMMapper.updateTbSku(skuId, tbSku) > 0;

    }


}